package cn.cdeden.resource.unified.domain.dto;

import cn.cdeden.common.oss.annotation.SystemModule;
import cn.cdeden.common.oss.enumd.OssModuleType;
import com.alibaba.fastjson2.JSONObject;
import io.swagger.v3.oas.annotations.Parameter;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.Serializable;


/**
 * @author Yu.
 * @Description // 文件上传接收类
 * @Date 2024/12/4 16:01
 * @return
 **/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FilesUploadDto implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 上传的文件
     **/
    @Parameter(name = "上传的文件")
    private MultipartFile file;

    /**
     * 文件上传的路径
     **/
    @Parameter(name = "文件上传的路径")
    private String filePath;

    /**
     * 存储编号
     **/
    private String moduleId;

    /**
     * 文件封面
     **/
    @Parameter(name = "文件封面")
    private MultipartFile coverImage;

    /**
     * 父编号
     **/
    @Parameter(name = "父编号")
    private String parentId;

//    /**
//     *  团队编号
//     **/
//    @Getter
//    @Setter
//    private String teamId;
//
    /**
     *  是否解压上传
     **/
    @Parameter(name = "是否解压上传")
    private boolean unzip = false;

    /**
     * 文件名称
     **/
    @Parameter(name = "文件名称")
    @Pattern(regexp = "^.{0,216}$", message = "文件名称,最长为216个字符")
    @Pattern(regexp = "^[^/\\\\\\:\\*\\?\\\"\\<\\>\\|\\\\]{1,216}$", message = "文件名称,不能用 `\\/:*?\"<>|` 作为文件名称,最长为216位")
    private String fileName;

    /**
     * 备注
     **/
    @Parameter(name = "备注")
    @Pattern(regexp = "^.{0,550}$", message = "文件名称,最长为550个字符")
    private String remarks;


    /**
     * 文件md5
     **/
    private String fileMd5;


    /**
     * 其他信息  存放个个模块的 要携带的其他参数
     **/
    @Parameter(name = "其他信息  存放个个模块的 要携带的其他参数")
    private JSONObject info;

    public void setJsonInfo(JSONObject info) {
        this.info = info;
    }

    public void setInfo(String info) {
        this.info = JSONObject.parseObject(info);
    }

    /**
     * 模块
     **/
    @NotNull(message = "缺少必要上传文件参数")
    @SystemModule //后端 添加类型
    private String type;


    public OssModuleType getTypeEnum() {
        return OssModuleType.findCoedInfo(this.type);
    }


}
